package com.ruixun.common;

import com.ruixun.constants.BusinessInterfaceStatus;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.http.HttpStatus;

import java.io.Serializable;

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ResponseResult<T> implements Serializable {



    private Integer code;

    private String message;

    private T data;

    /**
     * 返回成功数据（status：200）
     *
     * @param data 数据内容
     * @param <T>  数据类型
     * @return ResponseResult实例
     */
    public static <T> ResponseResult success(T data) {
//        return new ResponseResult().setCode(BusinessInterfaceStatus.SUCCESS.getCode())
//                .setMessage(BusinessInterfaceStatus.SUCCESS.getValue()).setData(data);
        return  ResponseResult.builder().code(BusinessInterfaceStatus.SUCCESS.getCode())
                .message(BusinessInterfaceStatus.SUCCESS.getValue()).data(data).build();
    }



    /**
     * 返回成功数据（status：200）
     *
     * @return ResponseResult实例
     */
    public static ResponseResult success() {
        return success(null);
    }

    /**
     * 返回错误数据（status：500）
     *
     * @param data 错误内容
     * @param <T>  数据类型
     * @return ResponseResult实例
     */
    public static <T> ResponseResult fail(T data) {
//        return new ResponseResult().setCode(HttpStatus.INTERNAL_SERVER_ERROR.value()).setMessage(HttpStatus.INTERNAL_SERVER_ERROR.name()).setData(data);
        return ResponseResult.builder().code(HttpStatus.INTERNAL_SERVER_ERROR.value())
                .message(HttpStatus.INTERNAL_SERVER_ERROR.name()).data(data).build();
    }

    /**
     * 自定义返回错误数据
     *
     * @param code    错误代码
     * @param message 错误消息
     * @return ResponseResult实例
     */
    public static ResponseResult fail(Integer code, String message) {
//        return new ResponseResult().setCode(code).setMessage(message);
        return ResponseResult.builder().code(code).message(message).build();
    }

    /**
     * @param code    错误代码
     * @param message 错误消息
     * @param data    错误内容
     * @return ResponseResult实例
     */
    public static ResponseResult fail(Integer code, String message, String data) {
//        return new ResponseResult().setCode(code).setMessage(message).setData(data);
        return ResponseResult.builder().code(code).message(message).data(data).build();
    }





}
